package com.pg.agent.manager.enums;

import com.alibaba.fastjson.JSON;

import java.util.Arrays;

/***
 *  数据类型枚举类
 * @author 胡华平
 * @date 2023-09-21 13:49:53
 */
public enum DataTypeEnum {

    Number(1, "Number", "数字类型"),
    String(2, "String", "字符串类型"),
    Boolean(3, "Boolean", "布尔类型"),
    Array(4, "Array", "数组类型");

    private Integer value;

    private String code;
    private String desc;

    DataTypeEnum(int value, String code, String desc) {
        this.value = value;
        this.code = code;
        this.desc = desc;
    }

    DataTypeEnum(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    /**
     * 根据值获取说明
     *
     * @param value 值
     * @return 说明
     */
    public static String getDescByValue(Integer value) {
        for (DataTypeEnum sexTypeEnum : DataTypeEnum.values()) {
            if (sexTypeEnum.value.equals(value)) {
                return sexTypeEnum.desc;
            }
        }
        return "";
    }

    /**
     * 根据值获取编码
     *
     * @param value 值
     * @return 返回值对应的编码
     */
    public static String getCodeByValue(Integer value) {
        for (DataTypeEnum dataTypeEnum : DataTypeEnum.values()) {
            if (dataTypeEnum.value.equals(value)) {
                return dataTypeEnum.code;
            }
        }
        return "";
    }

    /**
     * 数据转换
     *
     * @param value 枚举值
     * @param data  数据
     * @return 枚举值对应的数据类型
     */
    public static Object convertData(Integer value, Object data) {

        if (data == null) {
            return null;
        }

        DataTypeEnum dataTypeEnum1 = Arrays.stream(DataTypeEnum.values()).filter(dataTypeEnum -> dataTypeEnum.getValue().equals(value)).findFirst().orElse(null);

        if (dataTypeEnum1 == null) {
            return data;
        }

        switch (dataTypeEnum1) {
            case Number:
                return Double.valueOf(data.toString());
            case String:
                return data.toString();
            case Boolean:
                return data;
            case Array:
                String temp = data.toString();
                if (temp.indexOf("\"") > 0) {
                    return JSON.parseArray(data.toString(), String.class);
                } else {
                    return JSON.parseArray(data.toString(), Double.class);
                }
            default:
                return data;
        }
    }

    public Integer getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }
}
